#include "usermanage.h"
#include "ui_usermanage.h"
#include "adminmainwindow.h"
#include <QtSql>
#include <QSqlDatabase>
#include <QDebug>
#include <QString>
#include <QMessageBox>
#include <QSqlQuery>
#include <QSqlError>
#include <QFileInfo>
#include <QDir>
#include <QCoreApplication>
#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QLineEdit>
#include <QDateTime>
#include <QPalette>
#include <QStandardItemModel>

userManage::userManage(QSqlDatabase db, QWidget *parent) :
    QDialog(parent), m_db(db),
    ui(new Ui::userManage)
{
    ui->setupUi(this);

    // 1. 打印数据库连接的关键信息
    qDebug() << "数据库驱动名称：" << m_db.driverName();
    qDebug() << "数据库名称（文件路径）：" << m_db.databaseName();
    qDebug() << "数据库是否打开：" << m_db.isOpen();
    qDebug() << "数据库最后错误：" << m_db.lastError().text();

    // 2. 列出数据库中所有表，看有没有 login_users
    QSqlQuery tableQuery("SELECT name FROM sqlite_master WHERE type='table';", m_db);
    qDebug() << "数据库中的表：";
    while (tableQuery.next()) {
        qDebug() << tableQuery.value(0).toString();
    }

    // 3. 检查数据库连接是否有效
    if (!m_db.isOpen()) {
        QMessageBox::critical(this, "数据库错误", "数据库连接未打开");
        return;
    }

    // 初始化状态信息
    updateStatusInfo();
}

userManage::~userManage()
{
    delete ui;
}

// 更新状态信息（日期、用户总数等）
void userManage::updateStatusInfo()
{
    // 更新日期显示
    ui->dateLabel->setText("日期: " + QDateTime::currentDateTime().toString("yyyy-MM-dd"));
}

// 搜索用户功能
void userManage::on_pushButtonSearch_clicked()
{
    QString searchText = ui->lineEditSearch->text().trimmed();

    if (searchText.isEmpty()) {
        // 如果搜索框为空，显示所有用户
        tableModelLoadData();
        return;
    }

    // 使用QSqlQueryModel进行条件查询
    QSqlQueryModel *model = new QSqlQueryModel();

    // 模糊查询，匹配用户名或用户ID
    QString sql = QString("SELECT * FROM login_users "
                         "WHERE username LIKE '%%1%' OR user_id LIKE '%%1%'")
                         .arg(searchText);

    model->setQuery(sql, this->m_db);

    if (model->lastError().isValid()) {
        QMessageBox::critical(this, "查询错误", "搜索失败：" + model->lastError().text());
        delete model;
        return;
    }

    // 设置表格列名
    model->setHeaderData(0, Qt::Horizontal, "用户ID");
    model->setHeaderData(1, Qt::Horizontal, "用户名");
    model->setHeaderData(2, Qt::Horizontal, "电话号码");
    model->setHeaderData(3, Qt::Horizontal, "密码");  // 实际应用中应隐藏密码

    // 显示查询结果
    ui->tableView->setModel(model);

    // 调整列宽 - 使用 Qt 5.3 支持的 setResizeMode
    ui->tableView->horizontalHeader()->sectionResizeMode(QHeaderView::Stretch);

    // 显示搜索结果数量
    int resultCount = 0;
    QSqlQuery countQuery(this->m_db);
    if (countQuery.exec(QString("SELECT COUNT(*) FROM login_users "
                              "WHERE username LIKE '%%1%' OR user_id LIKE '%%1%'")
                              .arg(searchText))) {
        if (countQuery.next()) {
            resultCount = countQuery.value(0).toInt();
        }
    }

    //QMessageBox::information(this, "搜索结果", QString("找到 %1 个匹配的用户").arg(resultCount));
}

// 删除用户功能
void userManage::on_pushButtonDelete_clicked()
{
    QString id = ui->lineEditUser_id->text().trimmed();
    QString name = ui->lineEditUser_name->text().trimmed();

    if (id.isEmpty() || name.isEmpty()) {
        QMessageBox::information(this, "提示", "用户ID和用户名不能为空");
        return;
    }

    // 确认删除
    QMessageBox::StandardButton reply;
    reply = QMessageBox::question(this, "确认删除",
                                 QString("确定要删除用户ID为 %1，用户名为 %2 的记录吗？")
                                 .arg(id).arg(name),
                                 QMessageBox::Yes | QMessageBox::No);

    if (reply != QMessageBox::Yes) {
        return;
    }

    QSqlQuery query;
    query.prepare("DELETE FROM login_users WHERE user_id = :id AND username = :name");
    query.bindValue(":id", id.toInt());
    query.bindValue(":name", name);

    if (!query.exec()) {
        qDebug() << "删除失败:" << query.lastError().text();
        QMessageBox::critical(this, "错误", "删除操作失败: " + query.lastError().text());
        return;
    }

    // 检查是否有记录被删除
    if (query.numRowsAffected() == 0) {
        QMessageBox::information(this, "提示", "未找到匹配的用户，请检查输入");
    } else {
        QMessageBox::information(this, "成功", "用户已成功删除");
        // 清空输入框
        ui->lineEditUser_id->clear();
        ui->lineEditUser_name->clear();
        // 重新加载数据并更新统计
        tableModelLoadData();
    }
}

// 加载数据到表格
void userManage::tableModelLoadData()
{
    // 释放旧模型（如果有）
    if (ui->tableView->model()) {
        delete ui->tableView->model();
    }

    // 关键：创建 QSqlTableModel 时，传入 m_db
    QSqlTableModel *tableQuery = new QSqlTableModel(this, m_db);
    tableQuery->setTable("login_users");
    tableQuery->setEditStrategy(QSqlTableModel::OnFieldChange);

    // 执行查询
    if (!tableQuery->select()) {
        qDebug() << "QSqlTableModel 查询失败：" << tableQuery->lastError().text();
        QMessageBox::critical(this, "数据库错误", "加载用户数据失败: " + tableQuery->lastError().text());
        return;
    }

    // 设置模型到 tableView
    ui->tableView->setModel(tableQuery);
    ui->tableView->setColumnHidden(3, true); // 隐藏密码列（如果需要）
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

    // 输出查询到的行数
    qDebug() << "QSqlTableModel 查询到的行数:" << tableQuery->rowCount();
}

// 加载数据按钮
void userManage::on_pushButtonLoadData_clicked()
{
    tableModelLoadData();
}

// 返回上级按钮
void userManage::on_pushButton_clicked()
{
    QWidget *parentWidget = qobject_cast<QWidget*>(parent());
    if (parentWidget) {
        parentWidget->show();
    } else {
        adminMainWindow *m = new adminMainWindow(m_db);
        m->setAttribute(Qt::WA_DeleteOnClose);
        m->show();
    }
    this->close();
}

// 搜索框回车事件
void userManage::on_lineEditSearch_returnPressed()
{
    on_pushButtonSearch_clicked(); // 回车触发搜索
}
